4. About this presentation
The intro
Requirements
Creating and loading
Saving
Working with pages
Page sizes
Duplication and cloning
Colors & fonts
Text & image drawing
Styles
Advanced topics
5. Zend_PDF: the intro
Create or load pdf files
Manipulate pages within documents, reorder, delete, and so on…
Drawing possibilities for shapes, lines, …)
Drawing of text using 14 built-in fonts or use own TrueType Fonts
Image drawing (JPG, PNG [Up to 8bit per channel+Alpha] and TIFF images
are supported)
6. Requirements
Zend_PDF is a component that can be found in the standard Zend library
Latest Zend library available from http://framework.zend.com/download/latest
8. How to integrate
Use the autoloader for automatic load of the module when needed (or load it
yourself without ) :
protected function _initAutoload() {
$moduleLoader = new Zend_Application_Module_Autoloader(
array(
'namespace' => ‘demo',
'basePath' => APPLICATION_PATH
)
);
return $moduleLoader;
}
9. Creating and loading
One way to create a new pdf document:
Two ways to load an existing document:
Load it from a file:
Load it from a string:
$pdf = new Zend_Pdf();
$pdf = Zend_Pdf::load($fileName);
$pdf = Zend_Pdf::parse($pdfString);
10. Saving
Save a pdf document as a file:
Update an existing file by using true as second parameter:
You can also render the pdf to a string (example for passing through http)
$pdf->save(‘demo.pdf');
$pdf->save(‘demo.pdf‘, true);
$pdfData = $pdf->render();
11. Working with pages
Add a page to an existing file:
Remove a page from an existing file:
Reverse page order:
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
unset($pdf->pages[$id]);
$pdf->pages = array_reverse($pdf->pages);
12. Page sizes, some possibilities
Specify a specific size:
Some other possibilities are:
Use x and y coords to define your page:
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
$page = $pdf->newPage(200, 400);
$pdf->pages[] = $page;
Zend_Pdf_Page::SIZE_A4_LANDSCAPE
Zend_Pdf_Page::SIZE_LETTER
Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE
13. Page sizes, some possibilities
Get the height and width from a pdf page:
$page = $pdf->pages[$id];
$width = $page->getWidth();
$height = $page->getHeight();
14. Duplicating pages
Duplicate a page from a pdf document to create pages faster
Duplicated pages share resources from the template page so you can only duplicate
within the same file
// Store template page in a separate variable
$template = $pdf->pages[$templatePageIndex];
// Add new page
$page1 = new Zend_Pdf_Page($template);
$page1->drawText('Some text...', $x, $y);
$pdf->pages[] = $page1;
15. Cloning pages
Clone a page from any document. PDF resources are copied, so you are
not bound to the same document.
$page1 = clone $pdf1->pages[$templatePageIndex1];
$page2 = clone $pdf2->pages[$templatePageIndex2];
$page1->drawText('Some text...', $x, $y);
$page2->drawText('Another text...', $x, $y);
$pdf = new Zend_Pdf();
$pdf->pages[] = $page1;
$pdf->pages[] = $page2;
16. Colors
Zend_Pdf_Color supports grayscale, rgb and cmyk
Html style colors are also supported through Zend_Pdf_Color_Html
// $grayLevel (float number). 0.0 (black) - 1.0 (white)
$color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
// $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
// $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
$color1 = new Zend_Pdf_Color_Html('#3366FF');
17. Fonts at your disposal
Specify a font to use:
Some other possibilities are:
$page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA),
12);
Zend_Pdf_Font::FONT_COURIER
Zend_Pdf_Font::FONT_COURIER_BOLD
Zend_Pdf_Font::FONT_COURIER_ITALIC
Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC
Zend_Pdf_Font::FONT_TIMES
Zend_Pdf_Font::FONT_TIMES_BOLD
Zend_Pdf_Font::FONT_TIMES_ITALIC
Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC
Zend_Pdf_Font::FONT_HELVETICA
Zend_Pdf_Font::FONT_HELVETICA_BOLD
Zend_Pdf_Font::FONT_HELVETICA_ITALIC
Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC
Zend_Pdf_Font::FONT_SYMBOL
Zend_Pdf_Font::FONT_ZAPFDINGBATS
18. Use your own fonts
Only truetype fonts can be used, create the font:
Then use the font on the page:
$myFont = Zend_Pdf_Font::fontWithPath('/path/to/my/special/font__.TTF');
$page->setFont($myFont, 12);
19. An error with a custom font?
Errors can arise with embedding the font into the file or compressing the font.
You can use the following options to handle these errors:
Zend_Pdf_Font::EMBED_DONT_EMBED
Do not embed the font
Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
Do not throw the error
Zend_Pdf_Font::EMBED_DONT_COMPRESS
Do not compress
You can combine the above options to match your specific solution.
20. Adding text to the page
Function drawtext needs 3 parameters
drawText($text, $x, $y);
Optional you can specify character encoding as fourth parameter:
drawText($text, $x, $y, $charEncoding = ‘’);
Example:
$page->drawText('Hello world!', 50, 600 );
25. Using styles
Create styles to combine your own specific layout of pdf in one place:
After creating the style, add some elements to your style
Apply the style
$mystyle = new Zend_Pdf_Style();
$mystyle->setFont(Zend_Pdf_Font::fontWithName(
Zend_Pdf_Font::FONT_HELVETICA), 12);
$mystyle->Zend_Pdf_Color_Rgb(1, 1, 0));
$mystyle->setLineWidth(1);
$page1->setStyle($mystyle);
26. Document info
Add information to your document through the properties:
$pdf = Zend_Pdf::load($pdfPath);
echo $pdf->properties[‘Demo'] . "n";
echo $pdf->properties[‘Dennis'] . "n";
$pdf->properties['Title'] = ‘Demo';
$pdf->save($pdfPath);
27. Advanced topics
Zend_Pdf_Resource_Extractor class for cloning pages and share resources
through the different templates
Linear transformations, most of them are available as from ZF 1,8
(skew, scale, …)
28. Summary
Zend_PDF has powerful capabilities
Combining the extended pdf class on framework.zend.com makes life a little
easier